﻿Public Class SelecteerKlantForm

    Private _mainForm As VerkoopDetailsForm
    Private _idKlant As Integer
    Private _toonKlantZonderNaam As Boolean

#Region "Properties"

    Public Property IdKlant() As Integer
        Get
            Return _idKlant
        End Get
        Set(ByVal value As Integer)
            _idKlant = value
        End Set
    End Property

#End Region

#Region "Constructor"

    Public Sub New(ByVal mainForm As VerkoopDetailsForm, ByVal toonKlantZonderNaam As Boolean)
        Me.InitializeComponent()
        _toonKlantZonderNaam = toonKlantZonderNaam
        _mainForm = mainForm
    End Sub

    Protected Overrides Sub OnLoad(ByVal e As EventArgs)
        MyBase.OnLoad(e)
        Try
            Utility.Data.Klanten.CaseSensitive = False
            Me.KlantenBindingSource.DataSource = Utility.Data
            Me.KlantenBindingSource.Sort = "Naam"

            If (_toonKlantZonderNaam) Then
                Me.KlantenBindingSource.Filter = ""
            Else
                Me.KlantenBindingSource.Filter = String.Format("ID <> {0}", Constants.DEFAULT_KLANT_ID)
            End If
            ListBoxKlanten.SelectedIndex = -1
            ButtonSelecteer.Enabled = False
        Catch ex As Exception
            MsgBox.ShowError("Het ophalen van de data is mislukt")
            log.WriteError("SelecteerKlantForm.Load", ex)
        End Try
    End Sub

#End Region

#Region "Event handling"

    Protected Overrides Sub OnKeyUp(ByVal e As KeyEventArgs)
        MyBase.OnKeyUp(e)
        Select Case e.KeyCode
            Case Keys.F2
                SelecteerKlantEnSluit()
            Case Keys.F4
                CreateNieuweKlant()
            Case Keys.F12
                Me.Close()
        End Select
    End Sub

    Private Sub Ok_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSelecteer.Click
        SelecteerKlantEnSluit()
    End Sub

    Private Sub NieuweKlantButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NieuweKlantButton.Click
        CreateNieuweKlant()
    End Sub

    Private Sub ListBoxKlanten_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBoxKlanten.DoubleClick
        SelecteerKlantEnSluit()
    End Sub

    Private Sub ListBoxKlanten_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBoxKlanten.SelectedIndexChanged
        UpdateLabels()
    End Sub

    Private Sub tbFilter_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbFilter.TextChanged
        Me.KlantenBindingSource.Filter = String.Format("NaamEnGemeente LIKE '*{0}*'", tbFilter.Text)
        UpdateLabels()
    End Sub

#End Region

#Region "Helpers"

    Private Sub SelecteerKlantEnSluit()
        Try
            If ListBoxKlanten.SelectedIndex >= 0 Then
                Me._idKlant = Convert.ToInt32(ListBoxKlanten.SelectedValue)
                Me.DialogResult = Windows.Forms.DialogResult.OK
                Me.Close()
            End If
        Catch ex As Exception
            MsgBox.ShowError("Fout bij het selecteren van de klant")
            log.WriteError("SelecteerKlantForm.SelecteerKlantEnSluit", ex)
        End Try
    End Sub

    Private Sub CreateNieuweKlant()
        Dim klantenToevoegForm As New KlantenToevoegForm()
        If (klantenToevoegForm.ShowDialog() = DialogResult.OK) Then
            ' nieuwe klant wordt automatisch aan lijst toegevoegd via BindingSource

            SelecteerNieuweKlantInLijst(klantenToevoegForm.IdKlant)
        End If
    End Sub

    Private Sub SelecteerNieuweKlantInLijst(ByVal idKlant As Integer)
        Dim geselecteerdeKlant As Object = Nothing

        For Each item As Object In ListBoxKlanten.Items
            Dim drv As DataRowView = DirectCast(item, DataRowView)
            Dim klantRow As ArtikelsDataSet.KlantenRow = DirectCast(drv.Row, ArtikelsDataSet.KlantenRow)
            If (klantRow.Id = idKlant) Then
                geselecteerdeKlant = item
                Exit For
            End If
        Next
        ListBoxKlanten.SelectedItem = geselecteerdeKlant ' als dit binnen de lus gedaan wordt, crasht het (blijkbaar wijzigt dit de Items collectie)
    End Sub

    Private Sub UpdateLabels()
        If (ListBoxKlanten.SelectedIndex = -1) Then
            LabelKlantNaam.Text = ""
            LabelKlantAdres.Text = ""
            LabelKlantGemeente.Text = ""
            LabelKlantTelefoon.Text = ""
            ButtonSelecteer.Enabled = False
        Else
            Dim klantId As Integer = Convert.ToInt32(ListBoxKlanten.SelectedValue)
            Dim klantenRij As ArtikelsDataSet.KlantenRow = Utility.Data.Klanten.FindById(klantId)
            LabelKlantNaam.Text = klantenRij.Naam
            If (klantenRij.IsAdresNull) Then
                LabelKlantAdres.Text = ""
            Else
                LabelKlantAdres.Text = klantenRij.Adres
            End If
            If (klantenRij.IsGemeenteNull) Then
                LabelKlantGemeente.Text = ""
            Else
                LabelKlantGemeente.Text = String.Format("{0} {1}", klantenRij.Postcode, klantenRij.Gemeente)
            End If
            If (klantenRij.IsTelefoonNull) Then
                LabelKlantTelefoon.Text = ""
            Else
                LabelKlantTelefoon.Text = klantenRij.Telefoon
            End If
            ButtonSelecteer.Enabled = True
        End If
    End Sub

#End Region

End Class